package com.maptool.tools;


import android.app.Activity;

import com.esri.arcgisruntime.geometry.Geometry;
import com.esri.arcgisruntime.mapping.view.MapView;
import com.maptool.callback.ApplicationCallBack;
import com.maptool.map.GeometryClip;
import com.maptool.map.GeometryMove;

/**
 * @author dengpp
 * 地图操作工具，包含图斑平移、修边等功能
 */
public class MapApi {

    /**
     * --------------------------------------------------------图斑移动
     */
    /**
     * 平移地块
     *
     * @param mMapView     地图
     * @param moveGeometry 图形
     */
    public static void moveGeometry(MapView mMapView, Geometry moveGeometry) {
        try {
            GeometryMove.getInstance().moveGeometry(mMapView, moveGeometry);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * 获取移动后的图斑
     *
     * @return
     */
    public static Geometry getMoveGeometry() {
        try {
            return GeometryMove.getInstance().getMoveGeometry();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 移动图斑关闭
     */
    public static void closeMoveGeometry() {
        try {
            GeometryMove.getInstance().closeMoveGeometry();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * --------------------------------------------------------图斑修边
     */
    /**
     * @param mapView 地图
     * @param type    1、通过流状线修边；2、通过点状线修边;默认1-流状面
     */
    public static void clipGeometry(MapView mapView, int type) {
        try {
            GeometryClip.getInstance().clip(mapView, type);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param mapView 地图
     *                1、通过流状线修边；2、通过点状线修边;默认1-流状面
     */
    public static void clipGeometry(MapView mapView) {
        try {
            GeometryClip.getInstance().clip(mapView, 1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


    /**
     * @param mapView  地图
     * @param geometry 图形
     *                 默认保留多图形中面积最大的图形
     * @return
     */
    public static Geometry getClipGeometry(Activity activity, MapView mapView, Geometry geometry) {
        try {
            return GeometryClip.getInstance().saveClipGeometry(activity, mapView, geometry, 1, null);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * @param mapView  地图
     * @param geometry 图形
     * @param saveType 是否保留图形，如果修边修出多个图形后；
     *                 1:保留多图形中面积最大的图形，
     *                 2:原路返回，上层用户自己操作，
     *                 3:包中自动处理,如果是3，必须有ApplicationCallBack.DataCallBack mDataCallBack回调，在回调中获取修改的了的图形
     *                 默认1
     * @return
     * @throws Exception
     */
    public static Geometry getClipGeometry(Activity activity, MapView mapView, Geometry geometry, Integer saveType, ApplicationCallBack.DataCallBack mDataCallBack) {
        try {
            return GeometryClip.getInstance().saveClipGeometry(activity, mapView, geometry, saveType, mDataCallBack);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 关闭修边
     */
    public static void closeClip() {
        try {
            GeometryClip.getInstance().closeClip();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
